#include <iostream>
#include <sys/time.h>
#include <time.h>
#include <signal.h>
#include <unistd.h>

using std::cout;
using std::endl;

void handle_sig(int signum)
{
    time_t now;
    time(&now);
    printf("%s", ctime(&now));
}

// 真实计时器是计算程序开始执行到触发信号的时间
/*
例如有一段程序，用户态执行了 5秒，内核态执行了 4秒，sleep了 3秒
真实计时器： 5 + 4 + 3 = 12 
实用计时器： 5 + 4
虚拟计时器： 5
*/
int main(int args, char *argv[])
{
    // 设置 SIGALRM 信号处理函数
    signal(SIGALRM, handle_sig);
    struct itimerval itv{};
    itv.it_value.tv_sec = 3; // 设置初始间隔时间
    itv.it_interval.tv_sec = 2; // 设置循环间隔时间

    handle_sig(SIGALRM);
    setitimer(ITIMER_REAL, &itv, nullptr);
    while(1);
    return 0;
}